﻿select * from BankCard
--（1）编写一个函数求该银行的金额总和
create function ban_sum ()
returns money
as
begin
declare @money money
select @money=sum(CardMoney) from BankCard
return @money
end
select dbo.ban_sum()
drop function ban_sum
--（2）传入账户编号，返回账户真实姓名
select * from AccountInfo
create function reeal(@sum varchar(20))
returns @name table( 
Number varchar(20),
name varchar(20)
)
as
begin 
insert into @name
select AccountCode,RealName from AccountInfo where AccountCode=@sum
return
end
drop function reeal
select * from reeal('420107198905064135')
--（3）传递开始时间和结束时间，返回交易记录（存钱取钱），交易记录中包含 真实姓名，卡号，存钱金额，取钱金额，交易时间。
select * from CardExchange 
select * from AccountInfo
select * from BankCard
create function change(@start varchar(20),@end varchar(20))
returns @record table(
realname varchar(20),
cardno  varchar(20),
Inmoney money,
Outmoney money,
dealtime varchar(20)
)
as
begin
insert into @record
select realname,BankCard.CardNo,MoneyInBank,MoneyOutBank,ExchangeTime from CardExchange
left join BankCard on BankCard.CardNo=CardExchange.CardNo
left join AccountInfo on AccountInfo.AccountId=BankCard.AccountId
where ExchangeTime between @start and @end
return
end
select * from @record('')
--方案一（逻辑复杂，函数内容除了返回结果的sql语句还有其他内容，例如定义变量等）：

--（4）查询银行卡信息，将银行卡状态1,2,3,4分别转换为汉字“正常,挂失,冻结,注销”，根据银行卡余额显示银行卡等级 30万以下为“普通用户”,30万及以上为"VIP用户"，分别显示卡号，身份证，姓名，余额，用户等级，银行卡状态。

--方案一：直接在sql语句中使用case when

--方案二：将等级和状态用函数实现
create function class(@myMoney int)
returns varchar(10)
as
begin
	declare @result varchar(10)
	if @myMoney < 3000 
		set @result = '普通用户'
	else
		set @result = 'VIP用户'
	return @result
end


create function Astate(@myNum int)
returns varchar(10)
as
begin
	declare @result varchar(10)
	if @myNum = 1
		set @result = '正常'
	else if @myNum = 2
		set @result = '挂失'
	else if @myNum = 3
		set @result = '冻结'
	else if @myNum = 4
		set @result = '注销'
	else
		set @result = '异常'	
	return @result
end
--（5）编写函数，根据出生日期求年龄，年龄求实岁，例如：

--​		生日为2000-5-5，当前为2018-5-4，年龄为17岁
--​		生日为2000-5-5，当前为2018-5-6，年龄为18岁
create table Emp
(
	EmpId int primary key identity(1,2), --自动编号
	empName varchar(20), --姓名
	empSex varchar(4),   --性别
	empBirth smalldatetime --生日
)
insert into Emp(empName,empSex,empBirth) values('刘备','男','2008-5-8')
insert into Emp(empName,empSex,empBirth) values('关羽','男','1998-10-10')
insert into Emp(empName,empSex,empBirth) values('张飞','男','1999-7-5')
insert into Emp(empName,empSex,empBirth) values('赵云','男','2003-12-12')
insert into Emp(empName,empSex,empBirth) values('马超','男','2003-1-5')
insert into Emp(empName,empSex,empBirth) values('黄忠','男','1988-8-4')
insert into Emp(empName,empSex,empBirth) values('魏延','男','1998-5-2')
insert into Emp(empName,empSex,empBirth) values('简雍','男','1992-2-20')
insert into Emp(empName,empSex,empBirth) values('诸葛亮','男','1993-3-1')
insert into Emp(empName,empSex,empBirth) values('徐庶','男','1994-8-5')
select * from Emp

create function outBirth(@birth )